using System.Collections.Generic;

namespace PluginFrame
{
	public interface IPcrProgram
	{
		int ALLDetectionCount { get; set; }

		PcrExperimentType PcrExperimentType { get; }

		List<IAmplificationSegment> AmplificationSegments { get; set; }

		int AvailableAmplificationSegmentCount { get; }

		int AmplificationSegmentCount { get; }

		int AmplificationStepCount { get; }

		int AmplificationDetectionCount { get; set; }

		int MeltingDetectionCount { get; }

		int MeltingStepCount { get; }

		int TotalExperimentSecond { get; }

		List<IMeltingSegment> MeltingSegments { get; }

		List<IMeltingSegment> HRMSegments { get; }

		IPcrExperimentProject PcrExperimentProject { get; set; }

		double LastAmplificationTemperature { get; }

		void Update();

		IAmplificationSegment GetAmplificationSegment(int index);

		IMeltingSegment GetMeltingSegment(int index);

		IMeltingSegment GetHRMSegment(int index);

		string GetExperimentTotalTime(bool isCalculateTotalTime);

		void SetApplication(IApplication app);

		IApplication GetApplication();

		void SwapAmplificationSegment(int firstIndex, int secondIndex);

		int CalculateAmplificationSegmentSecond(int startSegment, int stopSegment, ref double lastTemperature);

		int CalculateMeltingSegmentSecond(int startCycle, int stopCycle, IMeltingSegment segment, ref double lastTemperature);

		bool IsEqual(IPcrProgram pcrProgram);

		bool HasAvailableMeltingSegment();

		bool HasAvailableHRMSegment();

		void RefreshHRMDetectionCount();
	}
}
